package com.csust.cg.mongodb.contorller;

import com.csust.cg.mongodb.domain.Result;
import com.csust.cg.mongodb.domain.vo.ConnectionVO;
import com.csust.cg.mongodb.domain.vo.ImportConnectionVO;
import com.csust.cg.mongodb.service.SaveConnectService;
import com.csust.cg.mongodb.utils.MongoUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;

/**
 * @author chenguang
 */
@RestController
@RequestMapping("/api/save_connect")
@ResponseBody
public class SaveConnectController {

    @Autowired
    private SaveConnectService saveConnectService;

    @PostMapping("/addSaveConnect")
    public Result addSaveConnect(@Validated ConnectionVO connection, String token) {
        if (connection.getGroups() == null || connection.getGroups().size() < 1) {
            return Result.error("分组信息不能为空！");
        }
        if (StringUtils.isBlank(connection.getName())) {
            return Result.error("连接名不能为空！");
        }
        return saveConnectService.addSaveConnectByGroup(connection, token);
    }

    @PostMapping("/addSaveConnectByConnectionId")
    public Result addSaveConnectByConnectionId(String connectionId, String token, String name, Integer groupId) {
        if (StringUtils.isBlank(connectionId)) {
            return Result.error("连接ID不能为空！");
        }
        if (StringUtils.isBlank(token)) {
            return Result.error("Token不能为空！");
        }
        if (groupId == null) {
            return Result.error("分组信息不能为空！");
        }
        if (StringUtils.isBlank(name)) {
            return Result.error("连接名不能为空！");
        }
        ConnectionVO connection = MongoUtils.getConnection(connectionId);
        connection.setName(name);
        ArrayList<Integer> groups = new ArrayList<>();
        groups.add(groupId);
        connection.setGroups(groups);
        Integer connectId = saveConnectService.addSaveConnect(connection, token);
        if (connectId == null) {
            return Result.error("系统保存连接错误，请联系开发人员！");
        } else {
            MongoUtils.getConnection(connectionId).setId(connectId);
            return Result.success();
        }
    }

    @PostMapping("/editSaveConnect")
    public Result editSaveConnect(@Validated ConnectionVO connection, String token, Integer id) {
        if (connection.getGroups() == null || connection.getGroups().size() < 1) {
            return Result.error("分组信息不能为空！");
        }
        if (StringUtils.isBlank(connection.getName())) {
            return Result.error("连接名不能为空！");
        }
        if (StringUtils.isBlank(token)) {
            return Result.error("Token不能为空！");
        }
        if (id == null) {
            return Result.error("连接ID不能为空！");
        }
        return saveConnectService.editSaveConnect(connection, token, id);
    }

    @PostMapping("/editSaveConnectNameAndGroup")
    public Result editSaveConnectNameAndGroup(String connectionId, String name, Integer groupId, String token, Integer id) {
        if (StringUtils.isBlank(connectionId)) {
            return Result.error("连接ID不能为空！");
        }
        if (StringUtils.isBlank(token)) {
            return Result.error("Token不能为空！");
        }
        if (groupId == null) {
            return Result.error("分组信息不能为空！");
        }
        if (id == null) {
            return Result.error("连接ID不能为空！");
        }
        if (StringUtils.isBlank(name)) {
            return Result.error("连接名不能为空！");
        }
        return saveConnectService.editSaveConnectNameAndGroup(connectionId, name, groupId, token, id);
    }

    @PostMapping("/removeSaveConnects")
    public Result removeSaveConnects(String token, @RequestParam("ids") ArrayList<Integer> ids) {
        if (StringUtils.isBlank(token)) {
            return Result.error("Token不能为空！");
        }
        if (ids == null || ids.size() < 1) {
            return Result.error("连接信息不能为空！");
        }
        return saveConnectService.removeSaveConnects(token, ids);
    }

    @GetMapping("/getAllSaveConnectList")
    public Result getAllSaveConnectList(String token) {
        if (StringUtils.isBlank(token)) {
            return Result.error("Token不能为空！");
        }
        return saveConnectService.getAllSaveConnectList(token);
    }

    @PostMapping("/importSaveConnectList")
    public Result importSaveConnectList(@RequestBody ImportConnectionVO importConnectionVO) {
        if (importConnectionVO.getToken() == null) {
            return Result.error("Token不能为空！");
        }
        if (importConnectionVO.getConnectionList() == null || importConnectionVO.getConnectionList().size() < 1) {
            return Result.error("导入集合不能为空！");
        }
        return saveConnectService.importSaveConnectList(importConnectionVO.getConnectionList(), importConnectionVO.getToken());
    }
}
